#pragma once

namespace AVUI {

class Exception : public Object
{
public:
    Exception(const char* szMessage) : m_szMessage(szMessage) { };

    DECLARE_ELEMENT(Exception, Object);

    const char* get_Message() { return m_szMessage; }

private:
    const char* m_szMessage;
};

class ArgumentNullException : public Exception
{
public:
    ArgumentNullException(const char* szMessage) : Exception(szMessage) { };

    DECLARE_ELEMENT(ArgumentNullException, Exception);
};

class ArgumentException : public Exception
{
public:
    ArgumentException(const char* szMessage) : Exception(szMessage) { };

    DECLARE_ELEMENT(ArgumentException, Exception);
};

class InvalidArgumentException : public Exception
{
public:
    InvalidArgumentException(const char* szMessage) : Exception(szMessage) { };

    DECLARE_ELEMENT(InvalidArgumentException, Exception);
};


class InvalidOperationException : public Exception
{
public:
    InvalidOperationException(const char* szMessage) : Exception(szMessage) { };

    DECLARE_ELEMENT(InvalidOperationException, Exception);
};


}; // namespace AVUI

 
